package fr.afcepf.ai89.lagrandebouffe.business;

import java.util.List;

import fr.afcepf.ai89.lagrandebouffe.entity.Plat;

/**
 * Définition des méthodes métier de l'appplication.
 * <code>
 * <strong>L'application doit savoir ajouter une {@link Plat}<strong>
 * <ul>
 * <li>
 * qui n'existe pas déjà dans la BDD.
 * </li>
 * </ul>
 * @author Florent
 *
 */
public interface IBusinessPlat {

    /**
     * Méthode permettant la suppression de {@link Plat}
     *  dans la BDD.
     * @param lePlat - le {@link Plat} à supprimer.
     * @return
     * <code>
     * <ul>
     *  <li><strong>true</strong><br />
     *  si le  {@link Plat} est bien supprimé.</li>
     *   <li>
     *      <strong>false</strong><br />
     *      dans le cas ou la suppression ne marche pas.
     *   </li>
     * </ul>
     * </code>
     */
    boolean delete(Plat lePlat);
    /**
     * Méthode permettant l'ajout de {@link Plat}
     *  dans la BDD.
     * @param lePlat - le {@link Plat} à ajouter.
     * @return
     * <code>
     * <ul>
     *  <li><strong>la clé primaire</strong><br />
     *  si le  {@link Plat} est bien ajouté.</li>
     *   <li>
     *      <strong>null</strong><br />
     *      dans le cas ou l'ajout ne marche pas.
     *   </li>
     * </ul>
     * </code>
     */
    Integer add(Plat lePlat);
    /**
     * Méthode permettant la suppression d'un {@link Plat}
     *  dans la BDD.
     * @param lePlat - le {@link Plat} à manger.
     * @return
     * <code>
     * <ul>
     *  <li><strong>true</strong><br />
     *  si le  {@link Plat} est bien mangé.</li>
     *   <li>
     *      <strong>false</strong><br />
     *      si on a encore faim.
     *   </li>
     * </ul>
     * </code>
     */
    boolean eat(Plat lePlat);
    /**
     * Méthode permettant de rechercher des
     *  {@link Plat} par libelle.
     * @param libelle - le libelle recherché dans le {@link Plat}
     * @return une liste de {@link Plat}.
     * <code>
     *  <ul>
     *      <li>
     *          une liste vide si aucun {@link Plat}
     *          ne correspond au libellé demandé.
     *      </li>
     *      <li>une liste contenant tous les
     *      {@link Plat} dont le libellé contient
     *      le paramètre libellé du plat recherché.
     *      </li>
     *  </ul>
     * </code>
     */
    List<Plat> find(String libelle);
}
